D8-FileClient¶
Сервис, предназначенный для импорта данных из файлов различного формата в систему Дельта.
Поддерживается обработка текстовых файлов, бинарных файлов, в том числе формата csv
, xml
, xlsx
.
Сервис позволяет принимать файлы из файловой системы, FTP-каталога и, для некоторых форматов, из web-сайтов.
Аргументы командной строки¶
-
-s (или -service, -r, -regserver)
Регистрация службы.
-
-u (или -unregserver)
Отмена регистрации.
-
-run
Запуск в режиме обычного приложения.
-
-nopbrvalidation
Отключает валидацию очередности и времени принимаемых ПБР.
-
-logsql
Включает логирование SQL-запросов.
-
-debuginfo
Добовляет отладачную информацию в лог.
Файлы конфигурации¶
-
d8_fileclient.xml
Основной конфигурационный файл.
-
d8_fileclient.commonrdutxt.xml
Конфигурация парсинга макетов для типа шаблонаCommonRduTxt
. Содержит регулярные выражения и другие настройки, необходимые для парсинга макетов.
-
d8_fileclient.commontxt.xml
Конфигурация парсинга макетов для шаблонаCommonTxt
на основе регулярных выражений.
Формат d8_fileclient.xml
¶
<configuration debugInfo="true/false, default: false" logSql="true/false, default: false" noPbrValidation="true/false, default: false" > <instances> <instance name="text" clientllConstr="text" clientllAuthConstr="text" paramDbConstr="text" archiveDbConstr="text" commandDbConstr="text" archiveDbConstr2="text" commandDbConstr2="text" > <vectorCatalog d8Id="vectorCatalog_paramId" entry="vectorCatalog_entryName" /> <folders> <folder name="text" type="MailFolder/FileFolder/FtpFolder/ModesSql, default: FileFolder" createdOnly="true/false, default: false, OBSOLETE" fileActions="GetExisting/GetNew/GetChanged/GetAll Copy/Move/DeleteSrcOnSuccess/DeleteSrcOnError/DeleteSrc/DeleteDstOnSuccess/DeleteDstOnError/DeleteDst, no default" sourcePath="text" scanSubdir="true/false, default: false" targetPath="text" backupPath="text" stateFolder="text" filter="text, default: *.*" minFileCreateAge="int_seconds / timespan, default: 0 - not used" maxFileCreateAge="int_seconds / timespan, default: 0 - not used" minFileModifAge="int_seconds / timespan, default: 0 - not used" maxFileModifAge="int_seconds / timespan, default: 0 - not used" pathPattern="regular_expression, default: not used" updateRate="int_seconds / timespan, default: 5" rescanRate="int_seconds / timespan, default: 0 - not used" timeout="int_seconds / timespan, default: 10" abandonTimeout="int_seconds / timespan / -1 (infinite), default: 00:30:00" vectorCatalogEntry="vectorCatalog_entryName" > <timezone bias="int_minutes" daylightSaving="true/false" timezoneString="timezoneId" daylightGap="true/false" /> <referenceTimezone bias="int_minutes" daylightSaving="true/false" timezoneString="timezoneId" /> <netuse remoteName="share_path" localName="network_drive_name" user="user" password="password" /> <ftpServer address="host_or_ip[:port]" user="user" password="password" passive="true/false, default: false" ssl="true/false, default: false" /> <preprocessing type="Execute/Xslt/Sql, default: Execute" constr="connsection_string" resultPath="path" successCode="int_rescode" > text </preprocessing> <processing> <template name="text" type="text, processingTemplateType" subtype="text" logOnly="true/false, default: false" ppbrOnly="true/false, default: false" storage="Default/NoStorage/Dataserver/Archive/RdgOnly/Rdg" pbrIsolationLevel="Unspecified/Chaos/ReadUncommitted/ReadCommitted/RepeatableRead/Serializable/Snapshot, default: Unspecified" reasonFormat="string, default: '{service}: {pbr}'" timeshift="timeSpan, default: 00:00:00" timeround="timeSpan, default: 00:00:00" defaultTimestamp="Empty/Current/File, default: File" allowMissingItems="true/false, default: false" > <timezone bias="int_minutes" daylightSaving="true/false" daylightGap="true/false" timezoneString="TZ_spec" /> <referenceTimezone bias="int_minutes" daylightSaving="true/false" timezoneString="TZ_spec" /> <items> <item srcId="text" d8Id="int, default: -1" d8Type="Analog/Discrete/Vector/Record, default: Analog" d8MetaType="metaTypeShortName, default: null" gtp="int, default: 0" includeSum="true/false" addToD8Id="int, default: 0" coefK="double, default: 1.0" /> <item /> ... </items> </template> <template /> ... </processing> <postprocessing type="Execute/Xslt/Sql, default: Execute">text</postprocessing> </folder> <folder /> ... </folders> </instance> <instance /> ... </instances> </configuration>
Тэг configuration
¶
-
debugInfo
То же, что и ключ-debuginfo
.
-
logSql
То же, что и ключ-logsql
.
-
noPbrValidation
То же, что и ключ-nopbrvalidation
.
Тэг instance
¶
Описывает одно подключение к подсистеме Дельта.
-
name
Логическое имя инстанса, участвует только в логах.
-
clientllConstr
Cтрока подключения кCS-DataServer
.
-
clientllAuthConstr
Cтрока подключения к БД, используемая для win-авторизации вCS-DataServer
. Если она не указана, то используется встроенная авторизация.
-
paramDbConstr
Cтрока подключения к БД НСИ. Она же при необходимости используется как строка подключения к БД метатипов.
-
archiveDbConstr
Cтрока подключения к архивной БД системы Дельта.
-
commandDbConstr
Cтрока подключения к БД команд системы Дельта.
-
archiveDbConstr2
Cтрока подключения к резервной архивной БД системы Дельта.
-
commandDbConstr2
Cтрока подключения к резервной БД команд системы Дельта.
Если указан атрибут archiveDbConstr
и не указан commandDbConstr
(или наоборот), то считается, что эти атрибуты имеют одинаковые значения.
Если clientllConstr
указан то D8-FileClient
будет подключаться к CS-DataServer
(даже если это подключение никак не будет использовано).
Тэг folder
¶
Описывает папку (на диске, в сети), которая служит источником данных.
-
name
Логическое имя folder-а, участвует только в логах.
-
sourcePath
Путь папки-источника.
-
type
Тип папки-источника. Возможные типы папки-источника:
MailFolder
Считается, что папка с путемsourcePath
- это папка, в которую складывает подпапки с письмами службаD8 MailClient
.
В этом случаеD8-FileClient
будет искать подпапки вsourcePath
, файлы непосредственно вsourcePath
игнорируются.
FileFolder
Источник данных - это файлы, которые находятся непосредственно в папкеsourcePath
(вложенные папки не обрабатываются).
ModesSql
Источник данных - это БД Modes-Terminal, аsourcePath
- это строка подключения этой БД.
-
scanSubdir
Еслиtrue
, то нужно сканировать вложенные папки.
-
createdOnly (устаревший)
Еслиfalse
, то обрабатываются все файлы в папке. Иначе обрабатываются файлы, которые появляются в папке-источнике. Атрибут оставлен для совместимости, использоватьfileActions
.
-
fileActions
Комбинация флагов (через пробел), которая задает то, какие файлы нужно принимать в обработку и какие действия с ними нужно совершать.Возможные флаги:
GetExisting
- обрабатывать файлы, существующие в папке-источнике на момент запуска службы.GetNew
- обрабатывать файлы, которые появляются в папке-источнике.GetChanged
- обрабатывать изменившиеся файлы в папке-источнике (признак изменения - это изменение времени модификации файла).GetAll
- обрабатывать все файлы в папке-источнике.Copy
- файл будет скопирован из папки-источника в папку-получатель и после это прочитан и обработан уже из папки-получателя.Move
- файл будет перемещен из папки-источника в папку-получатель и после это прочитан и обработан уже из папки-получателя.DeleteSrcOnSuccess
- файл в папке-источнике будет удален после обработки, если обработка завершилась без ошибок.DeleteSrcOnError
- файл в папке-источнике будет удален после обработки, если обработка завершилась ошибкой.DeleteSrc
- файл в папке-источнике будет удален ДО обработки в любом случае.DeleteDstOnSuccess
- файл в папке-получателе будет удален после обработки, если обработка завершилась без ошибок.DeleteDstOnError
- файл в папке-получателе будет удален после обработки, если обработка завершилась ошибкой.DeleteDst
- файл в папке-получателе будет удален после обработки в любом случае.
Если не указано ни флагаCopy
, ни флагаMove
, то будет обработан исходный файл в папке-источнике.
-
targetPath
Путь папки-получателя. Сюда служба копирует обработанные файлы. Если не указан, то обработанные файлы никуда не копируются.
-
filter
Фильтр для поиска файлов в папке-источнике в досовском формате. Например,*.xml
илиpbr?.*
. По умолчанию:*.*
-
maxFileCreateAge
Максимальное время от создания файла. Если атрибут задан (и не равен нулю), то для каждого файла будет проверяться между разница между текущим временем и временем создания файла. Если эта разница больше, чемmaxFileCreateAge
, то файл игнорируется. Ранее атрибут называлсяminFileAgeCreated
.
-
minFileCreateAge
Минимальное время от создания файла. Если атрибут задан (и не равен нулю), то для каждого файла будет проверяться между разница между текущим временем и временем создания файла. Если эта разница меньше, чемminFileCreateAge
, то файл игнорируется.
-
maxFileModifAge
Максимальное время от изменения файла. Если атрибут задан (и не равен нулю), то для каждого файла будет проверяться между разница между текущим временем и временем модификации файла. Если эта разница больше, чемmaxFileModifAge
, то файл игнорируется.
-
minFileModifAge
Минимальное время от изменения файла. Если атрибут задан (и не равен нулю), то для каждого файла будет проверяться между разница между текущим временем и временем модификации файла. Если эта разница меньше, чемminFileModifAge
, то файл игнорируется.
-
pathPattern
Регулярное выражения, используемое в качестве дополнительного фильтра файлов. Регулярное выражение используется после фильтраfilter
и накладывается на полный путь каждого файла.
Выражение однострочное и нечувствительное к регистру.
-
backupPath
Путь папки, в которую будут копироваться резервные копии файлов или папок перед их обработкой. По умолчанию не задан и резервные копии не создаются.
Возможные ошибки при создании резервных копий не считаются критическими и не прерываются процесс обработки файлов.
-
stateFolder
Путь папки, в которую будут сохраняться файлы состояния обработки. Если не указано, то не используется.
-
updateRate
Периодичность (в секундах) проверки папки на наличие новых файлов или подпапок, в секундах.
-
rescanRate
Периодичность (в секундах) перечитывания каталога папки-источника.
-
timeout
Таймаут операций с файлами и папками, в секундах. Например, если в течении таймаута не удается получить доступ к файлу, то в лог пишется ошибка.
-
abandonTimeout
Время, в течении которого служба будет повторять попытки обработать файл.
-
vectorCatalogEntry
Название записи в файловом архиве системы Дельта.
folder
может содержать:
preprocessing
,processing
,postprocessing
preprocessing
,processing
processing
processing
,postprocessing
preprocessing
- или вообще ничего
Тэг folder.netuse
¶
Элемент netuse
позволяет настроить подключение сетевого ресурса перед обработкой папок. Его атрибуты:
remoteName
Имя сетевого ресурса на удаленной машине.
localName
Имя сетевого ресурса для локальной машины (буква диска). Не обязательно.
user
Пользователь (желательно с указанием домена).
password
Пароль пользователя.
Пример:
<netuse remoteName="\\10.0.0.112\ras" user="10.0.0.112\delta8" password="delta222" />
Тэг folder.ftpServer
¶
Элемент ftpServer
позволяет задать настройки подключения к FTP-серверу (для типа папки-источника FtpFolder
). Его атрибуты:
address
Адрес (хост или IP) и порт (опционально) FTP-сервера.
user
Пользователь.
password
Пароль пользователя.
passive
Использовать или нет пассивный режим обмена.
ssl
Использовать или нет SSL-шифрование.
Тэг instance.vectorCatalog
¶
Элемент vectorCatalog
если указан, то позволяет включить в обработке для типа FileFolder
проверку наличия записи в архиве системы Дельта.
d8Id
Номер параметра системы Дельта, который представляет каталог файлового архива.
entry
Название записи в фаловом архиве системы Дельта. Это название может содержать те же токены, что и команды предобработки.
На уровне тэгаfolder
этот атрибут можно переопределить атрибутомfolder.vectorCatalogEntry
.
Если instance.vectorCatalog
указан, то при получении нового файла и перед началом обработки, будет выполнен поиск записи в архиве подсистемы Дельта с меткой времени, такой же как время изменения полученного файла и названием таким же, как указано в entryName
. Если запись есть, то обработка не выполняется (файл игнорируется).
Тэги preprocessing
и postprocessing
¶
Тэги preprocessing
и postprocessing
описывают предварительную и пост- обработку принимаемых файлов. С их помощью можно выполнить скрипт, запустить bat-файл и т.д.
type
Тип обработки.
Execute
Выполнение командной строки. Сама командная строка указывается в тексте тэгаpreprocessing
(илиpostprocessing
).
Sql
Выполнение SQL-запроса. Если указанconstr
, то запрос выполняется на источнике, со сторокой подключенияconstr
, иначе - на архивной БД. В последнем случае для работы необходимо указать строку соединеия вinstance.archiveDbConstr
. Текст запроса указывается в тексте тэгаpreprocessing
(илиpostprocessing
).
Xslt
Выполнение XSL-преобразования. Путь до файла преобразования.xsl
указывается вconstr
. Результат преобразования сохраняется в памяти и дополнительно, если указанresultPath
, записывается в файл. Макет типаXml
использует результат предобработки, сохраненный в памяти.
constr
Строка соединения для обработки типаSql
или путь к файлу с описанием преобразования для обработки типаXslt
.
resultPath
Путь к файлу, в который будут записаны результаты выполнения предобработки (для обработкиSql
иXslt
). В случае сSql
поля в файле разделяются табуляцией.
successCode
Код, который должны возвращать все команды обработки (для случаяExecute
). Если возвращаемй код отличается, то обработка завершается с ошибкой.
Текст командной строки пред-/постобработки text
, строка соединения constr
и путь resultPath
могут содержать токены, заменяемые на параметры обрабатываемого файла:
#targetpath
Полный путь обрабатываемого файла (включая имя).
Если указан атрибутfolder.targetPath
(т.е. путь папки-получателя), то#targetpath
- это путь обрабатываемого файла, который уже скопирован из папки-источника в папку-получатель. Если жеfolder.targetPath
не указан, то#targetpath
- это исходный путь обрабатываемого файла (т.е. в папке-источнике).
#targetname
Это имя обрабатываемого файла (без пути). Еслиfolder.targetPath
указан, то#targetname
- это имя которое файлу назначила служба при его копировании в папку-источник. Если не указан, то#targetname
- это исходное имя файла.
#targetfolder
Путь обрабатываемого файла без имени файла c завершающим слэшем в конце.
#targetnoextname
Имя обрабатываемого файла без расширения и точки.
#targetext
Расширение обрабатываемого файла (без точки).
#targetrelfolder
Относительный путь к папке обрабатываемого файла без слэша в начале и со слэшем в конце пути.
#originalpath
#originalname
#originalfolder
#originalnoextname
#originalext
#originalrelfolder
Аналогично токенам выше, но для исходного имени или пути обрабатываемого файла.
#caption
Заголовок файла.
Еслиfolder.type
равенMailFolder
, то#caption
- это тема письма.
#timestamp
Для случаяFileFolder
- это метка модификации файла.
Для случаяMailFolder
- это время отправки e-mail, c которым обрабатываемый файл был принят службойD8 MailClient
.
Например, нужно каждый принимаемый файл копировать в папкуC:\newfolder
, тогда можно написать:<preprocessing><![CDATA[cmd /C copy "#targetpath" "C:\newfolder\#originalname"]]></preprocessing>
Таким образом можно дублировать обработку одного и того же файла разными folder-ами или организовывать цепочки обработки.
Если надо каждый раз после успешного приема очередного файла нужно запускать VBS-скрипт, то можно написать<postprocessing><![CDATA[cscript myscript.vbs "#timestamp" "#targetpath"]]></postprocessing>
Тэг processing
¶
Тэг processing
описывает основную обработку принимаемых файлов и состоит из описания набора шаблонов (тэг template
). У каждого шаблона есть тип и, опционально, подтип. Название типа шаблона определяется в коде службы атрибутом TemplateData
. Названия подтипов каждого шаблона определяются конфигурационным файлом для соответствующего шаблона.
Атрибуты тэга template
:
name
Логическое имя template-а, участвует только в логах.
type
Тип шаблона.
Если принимаемый файл не подходит под шаблон указанного типа, то он игнорируется.
subtype
Подтип шаблона.
Если принимаемый файл не подходит под шаблон указанного типа и подтипа, то он игнорируется. Еслиsubtype
не указан, то принимаются файлы, подходящий под шаблон любого подтипа.
logOnly (для макетов ДГ)
Еслиtrue
, то принимать в режимеLOG_ONLY
(т.е. записывать ПБР во временные таблицы).
ppbrOnly (для макетов ДГ)
Еслиtrue
, то принимать только ПБР-0, остальные ПБР игнорировать.
storage
Тип хранения данных. Имеет смысл не для всех шаблонов.
Для шаблонов ПБР можно указать:Rdg
- стандартное сохранение в архив подсистемы Дельта и таблицыRDG*
;Archive
- запись только в архив;RdgOnly
- запись только в таблицыRDG*
.
Для шаблоновCommonTxt
можно указать:Dataserver
- писать только в текущие данные подсистемы Дельта,Archive
- писать только в архив подсистемы Дельта,Archive,Dataserver
- писать и в текущие данные, и в архив.
pbrIsolationLevel
Уровень изоляции транзакции, создаваемой для внесения изменений в БД ПБР. Возможные значения:Unspecified
- по умолчаниюChaos
ReadUncommitted
ReadCommitted
RepeatableRead
Serializable
Snapshot
reasonFormat
Формат вывода поляRDGEvents.REASON
. Может содержать слудующие токены подстановки:{service}
- отображаемое имя службы (D8-FileClient
){folder}
- атрибутfolder.name
{template}
- атрибутtemplate.name
{pbr}
- информация о ПБР (зависит от типа шаблона)
timeshift
Дополнительный сдвиг меток времени (добавляется к меткам).
timeround
Величина по которой будут округлены метки времени данных.
defaultTimestamp
Определяет значение меток времени, если они не указаны в макете данных.
Возможны значения:Empty
- пустое значение (DateTime.MinValue
)Current
- текущее времяFile
- время модификации файла макета или время получения макета
allowMissingItems
Определяет, допустим ли прием макетов, содержащих не все элементы, указанные в конфигурации.
Тэг timezone
¶
Тэг timezone
описывает часовой пояс меток времени данных в принимаемых макетах.
При сохранении значений в систему Дельта метки времени значения макета будут переведены из часового пояса timezone
в UTC.
Для многих макетов timezone
фиксирован и его можно (или нужно) не указывать.
timezone.bias
- это сдвиг времени в минутах от Гринвича. Для московского времени это -180 (до 2011 года). Начиная с 2011 года timezone
для московского часового пояса:
<timezone bias="-240" daylightSaving="false" daylightGap="?" />
Если timezone.daylightSaving
равен true
, то считается, что в макете используется переход на летнее время.
Вместо timezone.bias
и timezone.daylightSaving
можно указать timezone.timezoneString
(строковый идентификатор часового пояса).
Атрибут timezone.daylightGap
используется только для макетов ДГ. Если он true
, то считается что в сутки перехода на летнее/зимнее время в макете добавляется/убирается один час местного времени.
Тэг referenceTimezone
¶
Тэг referenceTimezone
используется в качестве вспомогательного часового пояса.
Для макетов ПБР - это московский часовой пояс. Используется для определения номера ПБР, актуальности ПБР, времени активации ПБР и пр.
Тэг item
¶
Тэг item
описывает набор данных в макете.
srcId
Идентификатор набора данных в исходном файле.
gtp
Для макетов ДГ - идентификатор ГТП в таблицеRDGGTPs
.
d8Id
Идентификатор параметра системы Дельта. Если равен 0, то данные для этого item не сохраняются в системе Дельта.
d8Type
Тип параметра Дельта.Analog
- аналоговый (по умолчанию)Discrete
- дискретныйVector
- векторныйRecord
- табличный
d8MetaType
Краткое имя мета-типа параметра. Может использоваться для параметров типаVector
илиRecord
для спецификации набора полей внутри структуры, представляющей одно значение для параметра.
Для получения информации о мета-типе используется мета-ДБ со строкой подключенияparamDbConstr
.
addToD8Id
Идентификатор параметра системы Дельта, к которому нужно прибавить данные этого item. Точнее, данные будут прибавлены к данным item-а, у которого атрибутd8Id
равен атрибутуaddToD8Id
этого item-а.
coefK
Коэффициент, на который надо умножить данные этого item-а. Если не указан, то умножения не будет.
includeSum
Для макетов ПБР - равенtrue
, если в макете в наборе данных, описываемым этим item-ом присутствует сумма всех значений.
Алгоритм обработки папок¶
Обработка папок типа FileFolder
¶
Алгоритм обработки folder для случая FileFolder
:
- Периодически проверяется наличие новых файлов. Если
createdOnly
равенtrue
, то новыми файлами считаются, те, которые появились в папке-источнике со времени предыдущей проверки. ЕслиcreatedOnly
равенfalse
, то новыми файлами считаются все файлы в папке-источнике.
Для случаяcreatedOnly
вновь появившиеся файлы обрабатываются так:
- новый файл замечается;
- далее отслеживается момент, когда время модификации файла перестает увеличиваться и этот файл можно открыть на чтение (т.е. файл полностью записан в папку-источник и закрыт);
- если доступ к файлу не появляется в течении 30 мин, то он игнорируется.
- новый файл замечается;
- В любом случае на новые файлы накладывается фильтр (
folder.filter
).
- Далее, если не
createdOnly
и папка-получатель указана, то новый файл копируется в папку-получатель (с новым именем) и удаляется из папки-источника.
- Затем, если указан
preprocessing
, то он выполняется. Если при этои происходит ошибка, то на этом обработка заканчивается.
- Дальше выполняется основная обработка (если она определена в конфиге):
- Служба пытается определить формат макета файла. Поиск выполняется среди всех типов шаблонов, описанных тэгами
template
.
- Если файл не подпадает ни под один формат, то обработка заканчивается.
- Если подходящий макет найден (тип макета определен), то проверяется поддип макета (сравнивается с
template.subtype
). Если поддип не соответствует тому, что написано вtemplate
, то обработка заканчивается. Еслиtemplate.subtype
вообще не указан в конфиге, то проверка на поддтип не выполняется.
- Далее, когда понятен тип и подтип макета, которому соответствует файл, производится парсинг файла и формируются наборы значений для каждого элемента данных (для каждого тэга item).
- Полученные наборы суммируются (при наличии атрибутов
item.addToD8Id
) и множатся на коэффициентitem.coefK
(при наличии таких атрибутов).
- Метки времени данных переводятся в UTC с помощью тэга
timezone
или кода обработки соответствующего макета.
- Для макетов ДГ производится проверка корректности времени (если не указан флажок
-nopbrvalidation
).
- Затем полученные данные сохраняются с использованием атрибута
template.storage
или кода обработки соответствующего макета.
- Служба пытается определить формат макета файла. Поиск выполняется среди всех типов шаблонов, описанных тэгами
- Если основная обработка завершается без ошибок, то выполняется пост-обработка (если она определена тэгом
postprocessing
).
Обработка папок типа MailFolder
¶
Обработка аналогична случаю FileFolder
, со следующими отличиями.
- Атрибут
createdOnly
всегда должен бытьfalse
.
- Производится не поиск новых файлов, а новых подпапок в папке-источнике.
- В папку-получатель (если она определена) копируются не отдельные файлы, а новая подпапка целиком (с переименованием).
- Вся обработка (
preprocessing
,processing
,postprocessing
) выполняется для каждого файла в обрабатываемой подпапке за исключением:
message.xml
body_original.txt
- Момент, когда у службы гарантировано должен быть доступ ко всем файлам подпапки определяется как момент, когда появляется доступ к файлу
message.xml
(файл с описанием e-mail).
- Такие мета-данные каждого файла из обрабатываемой подпапки как метка времени и тема читаются из
message.xml
.
- Если
message.xml
прочитать не удается, то соответствующая подпапка пропускается.
Макеты¶
Список поддерживаемых макетов:
D8DS
Файлы данных в форматеD8DS
.
CommonTxt
Макеты на основе регулярных выражений. Описываются в файлеd8_fileclient.commontxt.xml
.
Xml
Данные в формате XML.
В обработке используется принятый XML-файл или результат предобработки типаXslt
(при её наличии).
В принятых XML-данных для каждого элементаitem
будет выполнен XPath-запрос, указанный вitem.srcId
. Каждый XML-элемент в полученной выборке считается записью для параметра Дельта, а атрибуты этого элемента считаются полями этой записи.
Для сопоставления атрибутов XML-элемента с полями записи параметра используется описание мета-типа, указанное вitem.d8MetaType
. Имя атрибута XML-элемента принимается за имя свойства мета-типа параметра Дельта. Пустые значения пропускаются.
Binary
Бинарные файлы. Для каждого параметра указывается смещение в файле и тип данных.
OM650
Экспортный файл АСУТП OM650.
ProsoftDataImpXml
Файлы, создаваемые утилитойDataImpEx
от Прософт.
Zip
Произвольные файлы, сохраняемые в файловый архив подсистемы Дельта.
OscilNeva
Файлы осциллограмм РАС Нева. Макет унаследован от макетаZip
.
OscilAura
Файлы осциллограмм системы Аура. Макет унаследован от макетаZip
.
CommonRduTxt
Текстовые макеты ПБР на основе регулярных выражений. Описываются в файлеd8_fileclient.commonrdutxt.xml
.
XlsCells
Файлы Excel с привязкой параметров подсистемы Дельта к ячейкам на страницах документа.
IgresXls
XLS-макет ПБР, некогда используемый на Ириклинской ГРЭС.
ModesSql
Макеты ПБР, принимаемые из БД MSSQL системы Modes-Terminal.
ModesSqlCommands
Диспетчерские команды, принимаемые из БД MSSQL системы Modes-Terminal.
ChrduTxt
Текстовый макет ПБР, некогда используемый Челябинским РДУ.
ShgresTxt
Текстовый макет ПБР, некогда используемый на Шатурской ГРЭС.
MosrduTxt
Текстовый макет ПБР, некогда используемый на Московским РДУ.
TubrCsv
Текстовый макет ПБР, используемый в системах ТУБР Гекон, ТУБР Гепард и Modes Center.
Примеры¶
Примеры исходных файлов данных в формате различных макетов и примеры настройки службы для работы с такими входными данными размещены здесь:История версий¶
1.7.21.0400
- Служба переведена на стандарт
PrimitiveService
.
- Служба переведена на стандарт
1.6.20.0426
- Исправлена ошибка, из-за которой некорректно обрабатывалась ситуация с несуществующим или поврежденным файлом
.pbrdump
.
- Исправлена ошибка, из-за которой некорректно обрабатывалась ситуация с несуществующим или поврежденным файлом
1.6.19.0925
- Добавлена поддержка импорта XML-данных с помощью шаблона типа
Xml
и предварительная обработка типаXslt
(XSL-преобразование).
- Добавлена поддержка импорта XML-данных с помощью шаблона типа
1.5.19.0418
- Добавлена возможность проверки кода возврата после выполнения команды постобработки (предобработки).
- Добавлена возможность проверки кода возврата после выполнения команды постобработки (предобработки).
1.5.18.1030
- Атрибут
minFileAgeCreated
переименован вmaxFileCreateAge
(старое название оставлено для совместимости). - Добавлены настройки
<folder.maxFileCreateAge>
,minFileCreateAge
,maxFileModifAge
,minFileModifAge
. - В обработке команд
ModesSql
добавлена обработка командыP,3
(игнорируется).
- Атрибут
1.5.18.0813
- Улучшена обработка ошибок для
ModesSql
для случая отсутствия данных в исходной БД.
- Улучшена обработка ошибок для
1.5.18.0601
- Исправлена ошибка, из-за которой при поиски записи в
VectorCatalog
могло произойти исключение (NullReferenceException
).
- Исправлена ошибка, из-за которой при поиски записи в
1.5.18.0529
- Исправлена ошибка, из-за которой настройки
minFileAgeCreated
иpathPattern
нельзя было использовать совместно.
- Исправлена ошибка, из-за которой настройки
1.5.18.0524
- Для атрибута
minFileAgeCreated
теперь можно использовать формат задания в видеTimeSpan
(напр. "365.0:0:0"). - Обработка атрибута
minFileAgeCreated
добавлена для папок типаFtpFolder
иAuraRasWeb
.
- Для атрибута
1.5.18.0320
- Для папок типа
FtpFolder
добавлена возможность сканирования вложенных папок и добавлена поддержка фильтров на имена файлов (атрибут<folder>.filter
).
- Для папок типа
1.5.18.131
- Добавлено сопоставление команд Modes-Terminal в команды РДГ для ДК "Максимум генерации" и "Минимум генерации".
- Добавлено сопоставление команд Modes-Terminal в команды РДГ для ДК "Максимум генерации" и "Минимум генерации".
1.5.18.0123
- Пути
targetPath
,backupPath
,stateFolder
теперь по умолчанию разрешаются относительно папки службы. - Файлы состояния обработки фаловых папок теперь ограничиваются в размере на 2 Мб.
- Пути
1.5.17.1120
- Теперь для макетов
ModesSql
настройка<folder>.Timeout
записывается в таймаут выполнения таймаута команд в исходной БД.
- Теперь для макетов
1.5.17.1023
- Испрвлена обработка флагов
DeleteOnXxx
для папки типаMailFolder
. - Добавлена функция создания резервных копий файлов и папок перед их обработкой (настройка
backupPath
).
- Испрвлена обработка флагов
1.5.17.0830
- Теперь при парсинге строки значения служба поддерживает формат вида "<value>`S=<state>", что позволяет описывать значения, снабженные признаком статуса.
- Для макетов
CommonTxt
добавлена возможность использования регулярных выражений для поиска и замены текста в исходных данных.
1.5.17.0622
- Исправлена ошибка, из-за которой переподключение к датасерверу выполнялось с большой задержкой.
- Исправлена ошибка, из-за которой переподключение к датасерверу выполнялось с большой задержкой.
1.5.17.0621
- Добавлен тип макета
Binary
для импорта данных из бинарного файла по указанному смещению и типу данных.
- Добавлен тип макета
1.5.17.0526
- Теперь предобработка
Sql
позволяет выполнить запрос на любом SQL-источнике. А результат выполнения теперь можно записать в текстовый файл.
- Теперь предобработка
1.5.17.0331
- Добавлена поддержка импорта диспетчерских команд из БД Modes-Terminal (шпблон
ModesSqlCommands
).
- Добавлена поддержка импорта диспетчерских команд из БД Modes-Terminal (шпблон
1.4.17.0210
- Добавлена поддержка макета
XlsCells
.
- Добавлена поддержка макета
1.4.17.0130
- Опорный часовой пояс по умолчанию (настройка
templateReferenceTimezone
) изменен на"D8 Russia (UTC+03:00)"
. - Для макетов
TubrCsv
добавлен парсинг имени файла и поддержка макетов, содержащих данные за полные сутки, а не только начиная с первого часа действия ПБР.
- Опорный часовой пояс по умолчанию (настройка
1.4.16.0413
- Добавлена поддержка макета для файлов в формате D8DS.
1.4.16.0411
- Добавлнеа обработка null-значениий в таблице
RDGTriggers
.
- Добавлнеа обработка null-значениий в таблице
1.4.16.0329
- Изменения в API.
1.4.16.0205
- Теперь если соединения с датасервером нет, а оно необходимо, то файлы не обрабатываются.
1.4.15.1216
- Исправлена ошибка обработки множественных нахождений регулярного выражения в
CommonTxt
. - Добавлена возможность переименования целыми строками и указания переименования по умолчанию в
CommonTxt
. - Теперь в
ClientllConstr
можно указывать атрибуты win-авторизации, а атрибутClientllAuthConstr
можно не использовать. - Инициализация подключения к датасерверу теперь выполняется с повторами в случае исключений.
- Исправлена ошибка обработки множественных нахождений регулярного выражения в
1.4.15.1214
- Исправлена ошибка, из-за которой служба замечала изменение файла в FTP-каталоге только в первый раз.
- Удалены неиспользуемые фрагменты логики обработки кэша файловых каталогов.
1.4.15.1202
- Улучшено логирование обработки файлов для случаев, когда обработка не включает основную часть.
1.4.15.1125
- Добавлена установка свойства AppDescr для соединения с датасервером.
1.4.15.1123
- Теперь при обработке CommonTxt можно указывать группу регвыражения "timebase" для задания базы, относительно которой задаются метки времени в данных.
- При обработке макетов CommonTxt теперь можно принимать несколько значений в одной записи. Для этого вместо srcId нужно указать порядковый номер нахождения группы "value" подгруппы "record" от нуля в виде srcId="#0".
- Исправлена ошибка в обработке флага fileASctions DeleteSrc, приводившая к неудалению исходного файла.
1.4.15.1109
- Улучшено логирование предварительной обработки (таймаут для Execute).
1.4.15.1021
- Добавлен тип предварительной и пост-обработки Sql.
- В наборе команд
FileActions
. Добавлены флагиDeleteSrcXxx
, флагиDeleteXxx
переименованы вDeleteDstXxx
.
1.4.15.1013
- Добавлен тип папки-источника FtpFolder (директория на FTP-серерве) и элемент для указания настроек связи с FTP-сервером <folder>.<ftpServer>.
1.3.15.0917
- Теперь макеты Zip и его дочерние макеты можно использовать без VectorCatalog.
В этом случае в указанный в тэге item параметр сохраняется векторное значение, которое формируется как zip-архив указанных в srcId файлов.
- Теперь макеты Zip и его дочерние макеты можно использовать без VectorCatalog.
1.3.15.0910
- Улучшено логирование ошибок работы с VectorCatalog.
1.3.15.0908
- Добавлен макет OscilAura. Наследован от макета Zip, отличается только возможностью определения заголовка файла по его пути.
1.3.15.0903
- Добавлена возможность указывать флаги Delete, DeleteOnSuccess, DeleteOnError для папок типа MailFolder.
- Добавлена настройка template.allowMissingItems.
- Исправлена ошибка в обработке макетов ProsoftDataImpXml (в некоторых случаях была попытка обработать путь папки, вместо пути файла)
1.3.15.0901
- Исправлена ошибка в парсинге группы "value" регулярных выражения для макетов CommonTxt.
- Добавлена сортировка записей параметра по времени для CommonTxt.
1.3.15.0827
- Элемент vectorCatalog перенесен с уровня folder на уровень instance.
- Добавлен тип папки AuraRasWeb.
1.3.15.0826
- Добавлена поддержка макета ProsoftDataImpXml - XML-файл обмена данными от Прософт.
1.3.15.0805
- Исправлена ошибка обработки файлов для случая fileActions="GetAll".
1.3.15.0803
- Исправлена ошибка, которая приводила к удалению из очереди обработки файлы, на которые временно нет доступа.
1.3.15.0729
- Теперь атрибуты folder.timeout, folder.rescanRate и folder.updateRate можно указывать либо в секундах, либо в формате TimeSpan.
- Улучшен механизм остановки службы и отмены обработки.
1.3.15.0728
- Теперь каждый инстанс обрабатывается в своем потоке.
- Каталог файлового архива подсистемы Дельта теперь перечитывается раз в час.
1.3.15.0727
- Добавлены настройки folder.pathPattern и folder.rescanRate.
- Добавлен шаблон обработки OscilNeva. То же, что и Zip, но при парсинге выполняется попытка определить заголовок записи (название осциллограммы) из содержимого файла типа .os?? (файл осциллограммы РАС Нева).
1.3.15.0723
- Добавлены токены для подстановок в командах предобработки.
- Добавлена бработка переменных окружениях в командах предобработки.
- Добавлена возможность проверки наличия файлов (для FileFolder) в архиве системы Дельта.
- Добавлен шаблон обработки Zip для упаковки набора файлов и записи в архив системы Дельта.
1.2.15.0716
- Исправлена проблема совместимости с предыдущими версиями, которая проявлялась если в конфигурационном файле не указана настройка fileActions.
1.2.15.0710
- Добавлена настройка <template>.defaultTimestamp. Варианты значения: File, Current, Empty.
- Для шаблона CommonTxt добавлена возможность указывать в регулярном выражении группы timestamp, state, xstate.
- Для шаблона CommonTxt добавлена возможность указывать набор замен текста для каждой группы регулярного выражения (тэг <substitutions>).
- Теперь в конфигурации шаблона можно к типу шаблона через обратный слэш добавить подтип шаблона. Это ограничит перебор возможных подтипов до единственного варианта.
1.2.15.0708
- Исправлена ошибка в обработке значения <timezone>.timezoneString.
- Для шаблона CommonTxt добавлена возможность указывать миллисекунды, не указывать метку времени (в этом случае используется текущее время), указывать метку времени частично (можно указать дату и не указать время; указать дату и часы, но не указать минуты и секунды и т.д.).
- Добавлена поддержка векторных значений.
- Для шаблона CommonTxt можно указывать несколько групп "?<value>". Это будет соответствовать структуре типа object[] для векторного параметра.
- Для шаблона CommonTxt теперь можно внутри группы "?<value>" в регулярном выражении указать формат данных.
Формат записи:?<value[:[formatString][?dataType]]>
Например:?<value:dMMM HH:mm?System.DateTime>
1.2.15.0707
- Добавлена поддержка изменившегося формата БД Modes-T (таблицы PlanVersions и PlanValues).
1.2.15.0623
- Добавлена возможность подключения сетевого ресура.
1.2.15.0618
- Служба переведена на .NET4.
- Теперь пишет лог в отдельный evt-файл.
- Служба переведена на d8_client3, COM API больше не используется.
- Добавлен атрибут "timezoneString" для тэгов <timezone> и <referenceTimezone>, который теперь можно использовать вместо комбинации атрибутов "bias" и "daylightSaving". Теперь используется класс TimeConverter.
1.1.15.0403
- Исправлена ошибка, вызванная избыточной валидацией <folder>.fileActions.
1.1.14.1209
- Добавлена настройка <template>.timeshift. Если указана, то это значение будет добавлено к меткам времени данных.
- Добавлена настройка <template>.timeround. Если указана, то метки времени будут округлены до ближайшего времени кратного timeround.
1.1.14.1208
- Добавлен тип макета OM650 - экспортные файлы АСУТП OM650.
- Вместо настройки <folder>.createOnly добавлена настройка <folder>.fileActions. Старая настройка оставлена для совместимости.
- Добавлена настройка <item>.d8Type.
1.0.14.1028
- Теперь если при парсинге макета ПБР оказывается, что дата ПБР некорректна (не совпадает с началом суток), то в лог выводится предупреждение, а макет игнорируется.
1.0.14.0214
- Исправлена ошибка с дублированием инкремента триггеров в таблице RDGTriggers.
1.0.13.1216
- В макет TubrCsv добавлена поддержка еще одного формата даты/времени и анализ имени файла макета для определения того, что макет представляет собой ППБР.
1.0.12.1227
- Исправлена ошибка, приводившая к многократному принятию ПБР из Modes Terminal в случае, когда в конфигурации указано несколько вариантов настройки шаблона.
1.0.12.0924
- Улучшена обработка шаблона ChrduTxt. Теперь строки после первой пустой строки игнорируются. Было необходимо для обработки сигнатуры антивируса.
1.0.12.0921
- Добавлен атрибут <template>.reasonFormat - форматирование для значения, записываемого в поле REASON таблицы RDGEvents.
1.0.12.0919
- Исправлена ошибка парсинга файла pbrdump с отсутствующими датами ПБР/ППБР.
1.0.12.0808
- Исправления в логировании.
1.0.12.806
- Добавлен атрибут <template>.pbrTransIsolation и вывод уровня изоляции транзакции в лог (если logSql="true"). По умолчанию принимает значение Unspecified. Возможные значения - System.Data.IsolationLevel.
1.0.12.0803
- Два запроса модификации значений в таблице RDGTriggers объединены в один, чтобы избежать вероятность маскирования исключения OleDb из первого запроса.
1.0.12.0620
- Теперь при выборке макетов из БД Modes Terminal за одну итерацию выбираются макеты ППБР, а за следующую итерацию макеты ПБР. Если установлен флаг
-runOnce
, макеты выбираюся все за одну итерацию (как раньше, и ППБР, и ПБР). - При обработке макетов ПБР Modes Terminal в лог выводится id исходного макета.
- При выборке макетов из БД Modes Terminal даты (столбец day) проверяются на наличие ненулевого времени. Сделано для фильтрации записей с датой в местном (московском) времени.
- Теперь при выборке макетов из БД Modes Terminal за одну итерацию выбираются макеты ППБР, а за следующую итерацию макеты ПБР. Если установлен флаг
1.0.12.0601
- Теперь если не выставлен флаг debugInfo, то выборка ПБР из БД Modes Terminal огранчивается не только датами последних полученных ПБР и РДГ, но и текущим врменем. Сделано для того, чтобы на кластерах при переключении узлов не выбирались лишние записи и для возможности пропустить ПБР в случае многократной ошибки парсинга.
1.0.12.0531
- Добавлено сообщение в лог в случае, когда для параметра не обнаружено значений в ПБР в БД Modes Terminal.
1.0.12.0529
- Добавлена поддержка макетов Modes Terminal с пропусками значений.
1.0.12.0524
- Подробное логирование ошибок подключения к БД Modes Terminal.
- При ошибке парсинга макета из Modes Terminal обработка прерывается, на следующем цикле обработка начинается с этого же макета.
1.0.12.0521
- В запросе выборки значений ПБР из БД Modes Terminal устранена возможность получения дублирующихся записей.
1.0.12.0515
- В макете CommonTxt добавлен автовыбор SQL-провайдера для OLEDB-подключения к архивной БД.
1.0.12.0413
- Исправлена ошибка выборки планов БР из БД Modes Terminal.
1.0.12.0410
- Добавлена поддержка типа обработки папок ModesSql - база данных Modes Terminal. Для этого случая (<folder>.type="ModesSql"), <folder>.sourcePath - это строка соединения к БД Modes Terminal.
- Теперь элементы <timezone> и <referenceTimezone> можно указывать не только на уровне <template>, но и на уровне <folder>. Значения по умолчанию <timezone> и <referenceTimezone> больше не поддерживаются.
- Добавлен тип шаблона ModesSql.
1.0.11.1025
- Исправлена ошибка в обработке макета MosrduTxt (он же ShgresTxt), приводившая к неправильному вычислению времени начала действия ПБР.
1.0.11.1020
- Исправлена ошибка в обработке макета TubrCsv, приводившая к неправильному вычислению времени начала действия ПБР.
1.0.11.0914
- Добавлен тэг <template>.<referenceTimezone>. Используется в качестве вспомогательного часового пояса. Для макетов ПБР - это московский часовой пояс. Используется для определения номера ПБР, актуальности ПБР, времени активации ПБР и пр.
1.0.11.0913
- Актуальность макета ПБР теперь проверяется, используя часовой пояс, указанный в <template>.<timezone>. Раньше использовался фиксированный часовой пояс GMT+3/daylightsaving.
- В макете TubrCsv теперь также используется часовой пояс из <template>.<timezone>.
- Часовой пояс по умолчанию для макетов ПБР НЕ ИЗМЕНЕН и по-прежнему остается таким:
<timezone bias="-180" daylightSaving="true" daylightGap="true" />
- Для CommonRduTxt добавлен атрибут <template>.skip.
1.0.11.0909
- Добавлен флаг Default для атрибута <template>.storage;
- В конфигурацию добавлен макет 30308.
1.0.11.0712
- Добавлено сообщении о модификации архива при приеме ПБР.
- Добавлено гарантированное освобождение ресурсов SQL-транзакции при приеме ПБР.
1.0.11.0707
- Теперь файлы с ПБР перед множественной обработкой сортируются не только по дате модификации, но и по имени (во ыторую очередь).
1.0.11.0629
- В коде сохранения ПБР в базы данных исключена возможность одновременного создания двух подключений к одной и той же БД и одного и того же пользователя.
- Теперь при повторной регистрации в лог не выводится сообщение о том, что источник событий уже существует.
1.0.11.0602
- Добавлен атрибут <folder>.updateRate - периодичность проверки папок.
1.0.11.0601
- Добавлена сортировка файлов и папок перед обработкой. Для MailFolder, папки сортируются по имени. Для FileFolder, файлы сортируются по времени последнего изменения.
- Добавлены атрибуты <configuration>.debugInfo, <configuration>.noPbrValidation, <configuration>.logSql.
- Добавлен ключ командной строки -debuginfo.
- Добавлена возможность использования нескольких конфигураций для одного и того же типа макета.
- Теперь с флагом createdOnly="true" обрабатываются не только вновь появившиеся файлы, но и измененные и пересозданные файлы.
- Добавлен атрибут <template>.name.
1.0.11.0420
- Теперь к сообщению "Файл не был обработан, т.к. его формат не распознан или не включен в конфигурацию" добавляются все исключения, которые выбросили каждый из классов обработки макетов.
1.0.11.0419
- Изменено регулярное выражение для темы писем с ПБР в шаблоне ChrduTxt.
1.0.11.0202
- Добавлены атрибуты archiveDbConstr2 и commandDbConstr2.
1.0.11.0114
- Исправлена ошибка обработки часового пояса значения "Начало выполнения" в БД РДГ (поля D1, T1 и S1 в таблице RDGEvents).
- Теперь timezone влияет на повидение IgresXls.
1.0.11.0112
- Теперь папки с письмами (для MailFolder) пропускаются, если в них нет message.xml (или он не доступен). Раньше попытка обработки повторялась на следующей итерации.
1.0.10.1125
- Макет ShgresTxt переименован в MosrduTxt (старое название также работает).
1.0.10.1103
- Добавлена настройка coefK - коэффициент, на который будут помножены значения макетов ПБР.
- Добавлена поддержка макетов ПДГ и ППБР для ShgresTxt.
1.0.10.1102
- Добавлен макет ShgresTxt.
- Исправлена ошибка с записью в лог адресов IPv6 вместо IPv4 для макетов ПБР.
1.0.10.1101
- Исправлена ошибка с определением номера ПБР для макетов TubrCsv в случае зимнего времени.
- Теперь если при обработке папки писем не удалось считать message.xml, то папка с письмом все-равно перемещается в targetPath (если этот путь задан в настройках).
1.0.10.1022
- Добавлена пост-обработка (тэг <postprocessing>). Запускается только после успешного завершения основной обработки.
1.0.10.1021
- Удалено предупреждение в лог о том, что файл не был обработан, если конфигурация не содержит данных об обработке (тэги <processing>).
1.0.10.1020
- Для макетов ПБР добавлен режим сохранения только в архив (Archive) или в как обычно в архив и БД команд (Rdg). Настраивается атрибутом template.storage.
1.0.10.1018
- В макет TubrCsv добавлена обработка макетов, заканчивающихся символом '->' (код 1A).
1.0.10.0930
- В макет TubrCsv добавлена поддержка формата ТУБР "Гепард".
1.0.10.0928
- Добавлен макет CommonTxt на основе регулярных выражений.
1.0.10.0909
- Изменена логика обработки папки-источника для случая с настройкой createdOnly="true" для лучшей надежности с сетевыми папками.
1.0.10.0819
- Добавлены поддержка excel-макета ППБР для ИГРЭС (IgresXls). Для него в качестве srcId указывается номер столбца в xls-документе.
1.0.10.0811
- Добавлен ключ командной строки -logsql.
- Исправлена ошибка в обработке макетов FullDay.
1.0.10.0618
- Добавлено сообщение в лог об игнорировании файлав, нераспознанного формата.
1.0.10.0601
- Исправлена ошибка, из-за которой в RDGEvents попадало несколько записей для одного макета и ГТП.
1.0.10.0531
- Добавлен ключ -nopbrvalidation. Если указан, то ПБР-ы не проверяются на корректность даты и времени активации.
1.0.10.0529
- Первая версия. Поддержка текстовых макетов ПБР и CSV-макетов ТУБР.